#coding:utf-8

'''
第一步，缩小尺寸。
将图片缩小到8×8的尺寸，总共64个像素。这一步的作用是去除图片的细节，只保留结构、明暗等基本信息，摒弃不同尺寸、比例带来的图片差异。
第二步，简化色彩。
将缩小后的图片，转为64级灰度。也就是说，所有像素点总共只有64种颜色。
第三步，计算平均值。
计算所有64个像素的灰度平均值。
第四步，比较像素的灰度。
将每个像素的灰度，与平均值进行比较。大于或等于平均值，记为1；小于平均值，记为0。
第五步，计算哈希值。
将上一步的比较结果，组合在一起，就构成了一个64位的整数，这就是这张图片的指纹。组合的次序并不重要，只要保证所有图片都采用同样次序就行了。
得到指纹以后，就可以对比不同的图片，看看64位中有多少位是不一样的。在理论上，这等同于计算“汉明距离”（Hamming distance）。如果不相同的数据位不超过5，就说明两张图片很相似；如果大于10，就说明这是两张不同的图片。
'''

from PIL import Image

def get_hash(img_path):
    img = Image.open(img_path)
    #antialias 抗锯齿
    #convert L为转换为灰度图像
    img = img.resize((8, 8), Image.ANTIALIAS).convert('L')
    #像素平均值
    avg = sum(list(img.getdata()))/64.0

    #将avg和每个像素比较，得到长度为64的字符串
    str = ''.join(map(lambda i: '0' if i < avg else '1', img.getdata()))
    #str切割，每4个字符一组，转成16进制字符
    return ''.join(map(lambda x: '%x' % int(str[x:x+4], 2), range(0, 64, 4)))
